Mobility, Latent Trend and Omega for all states
- mobility trend for all states (spaghetti with mean).
Covariate that describes human mobility. These data come from Unacast. We smooth the raw data from Unacast using a spline fit, resulting in the trajectories of human movement shown below. This covariate is used to reduce baseline transmission. Here we show the mobility trends from all 50 states.
- latent trend for all states (spaghetti with mean).
- omega for all states (spaghetti with mean).
Correlation between Omega and Prevalence
- predictor = omega(t); response = daily prevalence(t)
California, and mean across states, at varying lags
- predictor = AUC of omega over time; response = cumulative all infections over time
- predictor = AUC of omega; response = cumulative all infections
- map of same (correlation, by state)
LS0tCnRpdGxlOiAiRmlndXJlcyIKb3V0cHV0OiBodG1sX25vdGVib29rCmF1dGhvcjogRXJpYyBNYXJ0eQotLS0KCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGluY2x1ZGU9VFJVRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LndpZHRoID0gIjEwMCUiKQpsaWJyYXJ5KGhlcmUpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGNvd3Bsb3QpCmxpYnJhcnkoeWFyZHN0aWNrKQpgYGAKCmBgYHtyIGRhdGF9CmFsbF9maWxlcyA8LSBsaXN0LmZpbGVzKHBhdGggPSBoZXJlKCJvdXRwdXQvY3VycmVudC8iKSwgcGF0dGVybiA9ICIuY3N2IikKcGFyYW1fZmlsZXMgPC0gbGlzdC5maWxlcyhwYXRoID0gaGVyZSgib3V0cHV0L2N1cnJlbnQvIiksIHBhdHRlcm4gPSAicGFyYW1zLW5hdHVyYWwucmRzIikKc3RhdGVfc3VtbWFyaWVzIDwtIHRpYmJsZSgpCnN0YXRlX3BhcmFtZXRlcnMgPC0gdGliYmxlKCkKc3RhdGVfbG9nbGlrcyA8LSB0aWJibGUoKQpzdGF0ZWRmIDwtcmVhZFJEUyhoZXJlKCJvdXRwdXQvY3VycmVudCIsICJzdGF0ZWRmLnJkcyIpKQpmb3IoaSBpbiAxOmxlbmd0aChhbGxfZmlsZXMpKSB7CiAgZG9fZmlsZSA8LSBhbGxfZmlsZXNbaV0KICBsb2NhdGlvbiA8LSBzdWIoIi5jc3YiLCAiIiwgZG9fZmlsZSkKICBzdGF0ZV9tZXRhZGF0YSA8LSBzdGF0ZWRmICU+JSBmaWx0ZXIoc3RhdGVfZnVsbCA9PSBzdWIoIi5jc3YiLCAiIiwgZG9fZmlsZSkpCiAgc3RhdGVfcG9wIDwtIHN0YXRlX21ldGFkYXRhICU+JSBwdWxsKHRvdGFsX3BvcCkKICBzdGF0ZV9pbml0UjAgPC0gc3RhdGVfbWV0YWRhdGEgJT4lIHB1bGwoaW5pdFIwKQogIHN0YXRlX2JldGFfcyA8LSAoc3RhdGVfaW5pdFIwKi4xKQogIAogIAogIHRtcGZpbGUgPC0gaGVyZSgib3V0cHV0L2N1cnJlbnQiLCBkb19maWxlKQogIHRtcCA8LSByZWFkLmNzdih0bXBmaWxlKSAlPiUKICAgIGZpbHRlcihzaW1fdHlwZSA9PSAic3RhdHVzX3F1byIgfCBpcy5uYShzaW1fdHlwZSksCiAgICAgICAgICAgdmFyaWFibGUgJWluJSBjKCJkYWlseV9jYXNlcyIsICJkYWlseV9kZWF0aHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiYWN0dWFsX2RhaWx5X2Nhc2VzIiwgImFjdHVhbF9kYWlseV9kZWF0aHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW9iaWxpdHlfdHJlbmQiLCAibGF0ZW50X3RyZW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMiLCAiZGFpbHlfYWxsX2luZmVjdGlvbnMiKSkgJT4lCiAgICBtdXRhdGUoZGF0ZSA9IGFzLkRhdGUoZGF0ZSkpICU+JQogICAgZHBseXI6OnNlbGVjdChsb2NhdGlvbiwgc2ltX3R5cGUsIHBlcmlvZCwgZGF0ZSwgdmFyaWFibGUsIG1lYW5fdmFsdWUpICU+JSAKICAgIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSB2YXJpYWJsZSwgdmFsdWVzX2Zyb20gPSBtZWFuX3ZhbHVlKSAlPiUKICAgIG11dGF0ZShiZXRhX3MgPSBzdGF0ZV9iZXRhX3MpICU+JSAKICAgIG11dGF0ZShwcmV2YWxlbmNlID0gZGFpbHlfYWxsX2luZmVjdGlvbnMgLyBzdGF0ZV9wb3ApICU+JSAKICAgIG11dGF0ZShvbWVnYSA9IG1vYmlsaXR5X3RyZW5kICogbGF0ZW50X3RyZW5kICogYmV0YV9zKSAlPiUgCiAgICBwaXZvdF9sb25nZXIoY29scyA9ICFjKGxvY2F0aW9uLCBzaW1fdHlwZSwgcGVyaW9kLCBkYXRlKSwgCiAgICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidmFyaWFibGUiLCAKICAgICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAibWVhbl92YWx1ZSIsCiAgICAgICAgICAgICAgICAgdmFsdWVzX2Ryb3BfbmEgPSBUUlVFKQoKICBzdGF0ZV9zdW1tYXJpZXMgPC0gYmluZF9yb3dzKHN0YXRlX3N1bW1hcmllcywgdG1wKSAjID8gd2FzIHRoaXMgbWlzc2luZz8KCiAgdG1wcGFyYW1maWxlIDwtIGhlcmUoIm91dHB1dC9jdXJyZW50IiwgcGFyYW1fZmlsZXNbaV0pCiAgdG1wcGFyYW1zIDwtIHJlYWRSRFModG1wcGFyYW1maWxlKQogIHRtcF9sb2dsaWsgPC0gZGF0YS5mcmFtZShsb2NhdGlvbiA9IHVuaXF1ZSh0bXAkbG9jYXRpb24pLAogICAgICAgICAgICAgICAgICAgICAgICBsb2dfbGlrID0gdG1wcGFyYW1zWyJMb2dMaWsiLCAyXSkKICBybm1zIDwtIHJvdy5uYW1lcyh0bXBwYXJhbXMpCiAgdG1wcGFyYW1zIDwtIHRtcHBhcmFtcyAlPiUKICAgIG11dGF0ZShwYXJhbWV0ZXIgPSBybm1zKSAlPiUKICAgIGZpbHRlcihpc19maXR0ZWQgPT0gInllcyIpICU+JQogICAgZHBseXI6OnNlbGVjdCgtaXNfZml0dGVkKSAlPiUKICAgIGdhdGhlcigia2V5IiwgInZhbHVlIiwgLXBhcmFtZXRlcikgJT4lCiAgICBmaWx0ZXIoa2V5ID09ICJYMSIpICU+JQogICAgZHBseXI6OnNlbGVjdCgta2V5KSAlPiUKICAgIG11dGF0ZShsb2NhdGlvbiA9IHVuaXF1ZSh0bXAkbG9jYXRpb24pKSAlPiUKICAgIGRwbHlyOjpzZWxlY3QobG9jYXRpb24sIHZhbHVlLCBwYXJhbWV0ZXIpCiAgCiAgc3RhdGVfcGFyYW1ldGVycyA8LSBiaW5kX3Jvd3Moc3RhdGVfcGFyYW1ldGVycywgdG1wcGFyYW1zKQogIHN0YXRlX2xvZ2xpa3MgPC0gYmluZF9yb3dzKHN0YXRlX2xvZ2xpa3MsIHRtcF9sb2dsaWspCn0KCiMgRml4ZWQgcGFyYW1ldGVycyB0YWJsZQpiZXRhc19uYW1lcyA8LSBybm1zW2dyZXAoImJbMC05XSsiLCBybm1zKV0gIyBmaW5kIHBhcmFtZXRlcnMgc3RhcnRpbmcgd2l0aCBiIGZvbGxvd2VkIGJ5IGFueSBudW1iZXIKc3BsaW5lX2NvZWZmaWNpZW50cyA8LSBwYXN0ZSgiU3BsaW5lIGNvZWZmaWNpZW50IiwgZ3N1YigiYiIsIiIsIGJldGFzX25hbWVzKSkKbmFtZXMoc3BsaW5lX2NvZWZmaWNpZW50cykgPC0gYmV0YXNfbmFtZXMKCnBhcmFtc192ZWMgPC0gYyhNSUZfSUQgPSAiTUlGIGlkIiwgCiAgICAgICAgICAgICAgICBMb2dMaWsgPSAiTG9nIExpa2VsaWhvb2QiLCAKICAgICAgICAgICAgICAgIExvZ0xpa19TRSA9ICJTRSBvZiBMb2cgTGlrZWxpaG9vZCIsIAogICAgICAgICAgICAgICAgYmV0YV9zID0gIlRyYW5zbWlzc2lvbiByYXRlIiwKICAgICAgICAgICAgICAgICMgUmVsYXRpdmUgVHJhbnNtaXNzaWJpbGl0eQogICAgICAgICAgICAgICAgZnJhY190cmFuc19lID0gIlJlbGF0aXZlIHRyYW5zbWlzc2liaWxpdHkgb2YgbGF0ZW50IGluZmVjdGlvbnMiLAogICAgICAgICAgICAgICAgZnJhY190cmFuc19hID0gIlJlbGF0aXZlIHRyYW5zbWlzc2liaWxpdHkgb2YgYXN5bXB0b21hdGljIGluZGl2aWR1YWxzIiwKICAgICAgICAgICAgICAgIGZyYWNfdHJhbnNfYyA9ICJSZWxhdGl2ZSB0cmFuc21pc3NpYmlsaXR5IG9mIGRldGVjdGVkIHN5bXB0b21hdGljIGluZGl2aWR1YWxzIHBvc3QtcmVwb3J0aW5nIiwKICAgICAgICAgICAgICAgIGZyYWNfdHJhbnNfaCA9ICJSZWxhdGl2ZSB0cmFuc21pc3NpYmlsaXR5IG9mIGhvc3BpdGFsaXplZCBpbmRpdmlkdWFscyIsCiAgICAgICAgICAgICAgICAjIFRpbWUgaW4gY29tcGFydG1lbnRzCiAgICAgICAgICAgICAgICB0aW1lX2UgPSAiVGltZSBzcGVudCBpbiBsYXRlbnQgY29tcGFydG1lbnRzIChkYXlzKSIsCiAgICAgICAgICAgICAgICB0aW1lX2EgPSAiVGltZSBzcGVudCBpbiBhc3ltcHRvbWF0aWMgY29tcGFydG1lbnRzIChkYXlzKSIsCiAgICAgICAgICAgICAgICB0aW1lX3N1ID0gIlRpbWUgc3BlbnQgaW4gc3ltcHRvbWF0aWMsIHVuZGV0ZWN0ZWQgY29tcGFydG1lbnRzIChkYXlzKSIsCiAgICAgICAgICAgICAgICB0aW1lX3NkID0gIlRpbWUgc3BlbnQgaW4gc3ltcHRvbWF0aWMsIGRldGVjdGVkIGNvbXBhcnRtZW50cyAoZGF5cykiLAogICAgICAgICAgICAgICAgdGltZV9jID0gIlRpbWUgc3BlbnQgaW4gZGlhZ25vc2VkIGNhc2VzIGNvbXBhcnRtZW50cyAoZGF5cykiLAogICAgICAgICAgICAgICAgdGltZV9oID0gIlRpbWUgc3BlbnQgaW4gaG9zcGl0YWxpemVkIGNvbXBhcnRtZW50cyAoZGF5cykiLAogICAgICAgICAgICAgICAgIyBEZXRlY3Rpb24gdGltZQogICAgICAgICAgICAgICAgbWF4X2RpYWdfZmFjdG9yID0gIk1heGltdW0gZm9yIGZhY3RvciBieSB3aGljaCBtb3ZlbWVudCB0aHJvdWdoIElzZCBoYXBwZW5zIGZhc3RlciAocXVpY2tlciBkaWFnbm9zaXMpIiwKICAgICAgICAgICAgICAgIGRpYWdfcmFtcHVwID0gIlJhdGUgYXQgd2hpY2ggZmFzdGVyIGRpYWdub3NpcyByYW1wcyB1cCB0byBtYXgiLAogICAgICAgICAgICAgICAgdF9oYWxmX2RpYWcgPSAiVGltZSBhdCB3aGljaCBkaWFnbm9zaXMgaXMgYXQgNTAlIG9mIG1heCAoaW4gZGF5cyBzaW5jZSB0ID0gMSkiLAogICAgICAgICAgICAgICAgIyBEZXRlY3Rpb24gZnJhY3Rpb24KICAgICAgICAgICAgICAgIG1heF9kZXRlY3RfZnJhYyA9ICJNYXhpbXVtIGZyYWN0aW9uIG9mIGNhc2VzIHRoYXQgYXJlIGRldGVjdGVkIiwKICAgICAgICAgICAgICAgIGRldGVjdF9yYW1wdXAgPSAiU3BlZWQgYXQgd2hpY2ggZnJhY3Rpb24gZGV0ZWN0ZWQgcmFtcHMgdXAiLAogICAgICAgICAgICAgICAgdF9oYWxmX2RldGVjdCA9ICJUaW1lIGF0IHdoaWNoIGluZmVjdGlvbiBkZXRlY3Rpb24gZnJhY3Rpb24gaXMgYXQgNTAlIG9mIG1heCAoaW4gZGF5cyBzaW5jZSB0ID0gMSkiLAogICAgICAgICAgICAgICAgYmFzZV9kZXRlY3RfZnJhYyA9ICJNaW5pbXVtIGZyYWN0aW9uIGRldGVjdGVkIGF0IHQgPSAxIiwKICAgICAgICAgICAgICAgICMgRnJhY3Rpb24gYXN5bXB0b21hdGljCiAgICAgICAgICAgICAgICBmcmFjX2FzeW0gPSAiRnJhY3Rpb24gb2YgbGF0ZW50IGluZmVjdGlvbnMgdGhhdCBtb3ZlIHRvIGFzeW1wdG9tYXRpYyIsCiAgICAgICAgICAgICAgICAjIEZyYWN0aW9uIGhvc3B0aWxpemVkCiAgICAgICAgICAgICAgICBmcmFjX2hvc3AgPSAiRnJhY3Rpb24gb2YgZGV0ZWN0ZWQgY2FzZXMgdGhhdCBhcmUgaG9zcGl0YWxpemVkIiwKICAgICAgICAgICAgICAgICMgRnJhY3Rpb24gb2YgaG9zcGl0YWxpemF0aW9ucyB0aGF0IHJlc3VsdCBpbiBkZWF0aAogICAgICAgICAgICAgICAgbWluX2ZyYWNfZGVhZCA9ICJNYXhpbXVtIGZyYWN0aW9uIG9mIGhvc3BpdGFsaXphdGlvbnMgdGhhdCByZXN1bHQgaW4gZGVhdGgiLAogICAgICAgICAgICAgICAgbWF4X2ZyYWNfZGVhZCA9ICJNYXhpbXVtIGZyYWN0aW9uIG9mIGhvc3BpdGFsaXphdGlvbnMgdGhhdCByZXN1bHQgaW4gZGVhdGgiLAogICAgICAgICAgICAgICAgbG9nX2hhbGZfZGVhZCA9ICJUaW1lIGF0IHdoaWNoIGRlYXRoIGZyYWN0aW9uIGlzIGF0IDUwJSBvZiBtYXggKGluIGRheXMgc2luY2UgdCA9IDEpIiwKICAgICAgICAgICAgICAgICMgRGlzcGVyc2lvbiBwYXJhbWV0ZXJzCiAgICAgICAgICAgICAgICB0aGV0YV9jYXNlcyA9ICJEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgY2FzZSByZXBvcnRpbmcgb2JzZXJ2YXRpb24gcHJvY2VzcyIsCiAgICAgICAgICAgICAgICB0aGV0YV9ob3NwcyA9ICJEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgaG9zcGl0YWxpemF0aW9uIHJlcG9ydGluZyBvYnNlcnZhdGlvbiBwcm9jZXNzIiwKICAgICAgICAgICAgICAgIHRoZXRhX2RlYXRocyA9ICJEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgZGVhdGggcmVwb3J0aW5nIG9ic2VyY2F0aW9uIHByb2Nlc3MiLAogICAgICAgICAgICAgICAgc2lnbWFfZHcgPSAiVmFyaWFuY2Ugb2YgdGhlIHN0b2NoYXN0aWNzIHByb2Nlc3Mgbm9pc2UiLAogICAgICAgICAgICAgICAgIyBTcGxpbmUgY29lZmZpY2llbnRzCiAgICAgICAgICAgICAgICBzcGxpbmVfY29lZmZpY2llbnRzLAogICAgICAgICAgICAgICAgIyBJbml0aWFsIGNvbmRpdGlvbnMKICAgICAgICAgICAgICAgIFNfMCA9ICJJbml0aWFsIG51bWJlciBvZiBzdXNjZXB0aWJsZSBpbmRpdmlkdWFscyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBFMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIGxhdGVudCBpbmZlY3Rpb3VzIGluZGl2aWR1YWxzIG9uIHQgPSAxIiwKICAgICAgICAgICAgICAgIElhMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIGFzeW1wdG9tYXRpYyBpbmRpdmlkdWFscyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBJc3UxXzAgPSAiSW5pdGlhbCBudW1iZXIgb2Ygc3ltcHRvbWF0aWMsIHVuZGV0ZWN0ZWQgaW5kaXZpZHVhbHMgb24gdCA9IDEiLAogICAgICAgICAgICAgICAgSXNkMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIHN5bXB0b21hdGljLCBkZXRlY3RlZCBpbmRpdmlkdWFscyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBDMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIGRpYWdub3NlZCBjYXNlcyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBIMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIGhvc3BpdGFsaXplZCBjYXNlcyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBSXzAgPSAiSW5pdGlhbCBudW1iZXIgb2YgcmVjb3ZlcmVkIGluZGl2aWR1YWxzIG9uIHQgPSAxIiwKICAgICAgICAgICAgICAgIERfMCA9ICJJbml0aWFsIG51bWJlciBvZiBkZWF0aHMgYWZ0ZXIgaG9zcGl0YWxpemF0aW9uIG9uIHQgPSAxIiwKICAgICAgICAgICAgICAgIHRyZW5kX3N0YXJ0ID0gIlRyZW5kIikKCnRtcHBhcmFtcyA8LSByZWFkUkRTKHRtcHBhcmFtZmlsZSkKcm5tcyA8LSByb3cubmFtZXModG1wcGFyYW1zKQpwYXJhbXNfbWFwIDwtIHRpYmJsZShQYXJhbWV0ZXIgPSBuYW1lcyhwYXJhbXNfdmVjKSwKICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPSBwYXJhbXNfdmVjKQpmaXhlZF9wYXJhbWV0ZXJzIDwtIHRtcHBhcmFtcyAlPiUKICBtdXRhdGUoUGFyYW1ldGVyID0gcm5tcykgJT4lCiAgZmlsdGVyKGlzX2ZpdHRlZCA9PSAibm8iKSAlPiUKICBkcGx5cjo6c2VsZWN0KC1pc19maXR0ZWQpICU+JQogIGdhdGhlcigia2V5IiwgInZhbHVlIiwgLVBhcmFtZXRlcikgJT4lCiAgZmlsdGVyKGtleSA9PSAiWDEiKSAlPiUKICBsZWZ0X2pvaW4ocGFyYW1zX21hcCwgYnkgPSAiUGFyYW1ldGVyIikgJT4lCiAgZmlsdGVyKCFQYXJhbWV0ZXIgJWluJSBjKCJNSUZfSUQiLCAiTG9nTGlrIiwgIkxvZ0xpa19TRSIsICJ0cmVuZF9zdGFydCIsICJ0aGV0YV9ob3NwcyIsICJTXzAiKSkgJT4lCiAgZHBseXI6OnNlbGVjdChQYXJhbWV0ZXIsIERlc2NyaXB0aW9uLCB2YWx1ZSkgJT4lCiAgbXV0YXRlKFBhcmFtZXRlciA9IGlmZWxzZShQYXJhbWV0ZXIgPT0gIkUxXzAiLCAiTDFfMCIsIFBhcmFtZXRlcikpCgpmdXR1cmUgPC0gc3RhdGVfc3VtbWFyaWVzICU+JSBmaWx0ZXIocGVyaW9kID09ICJGdXR1cmUiKSAlPiUgcHVsbChkYXRlKSAlPiUgcmFuZ2UoKQoKYGBgCgojIE1vYmlsaXR5LCBMYXRlbnQgVHJlbmQgYW5kIE9tZWdhIGZvciBhbGwgc3RhdGVzCgphKSBtb2JpbGl0eSB0cmVuZCBmb3IgYWxsIHN0YXRlcyAoc3BhZ2hldHRpIHdpdGggbWVhbikuICAKCkNvdmFyaWF0ZSB0aGF0IGRlc2NyaWJlcyBodW1hbiBtb2JpbGl0eS4gVGhlc2UgZGF0YSBjb21lIGZyb20gPGEgaHJlZj0iaHR0cHM6Ly93d3cudW5hY2FzdC5jb20vIiB0YXJnZXQ9Il9ibGFuayI+VW5hY2FzdDwvYT4uIFdlIHNtb290aCB0aGUgcmF3IGRhdGEgZnJvbSBVbmFjYXN0IHVzaW5nIGEgc3BsaW5lIGZpdCwgcmVzdWx0aW5nIGluIHRoZSB0cmFqZWN0b3JpZXMgb2YgaHVtYW4gbW92ZW1lbnQgc2hvd24gYmVsb3cuIFRoaXMgY292YXJpYXRlIGlzIHVzZWQgdG8gcmVkdWNlIGJhc2VsaW5lIHRyYW5zbWlzc2lvbi4KSGVyZSB3ZSBzaG93IHRoZSBtb2JpbGl0eSB0cmVuZHMgZnJvbSBhbGwgNTAgc3RhdGVzLgoKYGBge3IgY292YXJpYXRlLCBmaWcuaGVpZ2h0PTMsIGZpZy53aWR0aD03LCBldmFsID0gVFJVRX0KYWxsX3BoaSA8LSBzdGF0ZV9zdW1tYXJpZXMgJT4lCiAgZmlsdGVyKHZhcmlhYmxlID09ICJtb2JpbGl0eV90cmVuZCIpICU+JQogIGRwbHlyOjpzZWxlY3QobG9jYXRpb24sIGRhdGUsIG1lYW5fdmFsdWUpICU+JQogIGZpbHRlcihkYXRlIDw9IFN5cy5EYXRlKCkpCgptZWFuX3BoaSA8LSBhbGxfcGhpICU+JSBncm91cF9ieShkYXRlKSAlPiUgc3VtbWFyaXNlKG1lYW5fdmFsdWUgPSBtZWFuKG1lYW5fdmFsdWUpKQoKZ19waGkgPC0gZ2dwbG90KGFsbF9waGksIGFlcyh4ID0gZGF0ZSwgeSA9IG1lYW5fdmFsdWUsIGNvbG9yID0gbG9jYXRpb24pKSArCiAgZ2VvbV9saW5lKHNpemUgPSAwLjUpICsKICAjIHlsYWIoIkh1bWFuIG1vdmVtZW50XG4oJSBvZiBub3JtYWwpIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMSksIGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfZChvcHRpb24gPSAiRCIsIGRpcmVjdGlvbiA9IC0xLCBhbHBoYSA9IC42LCBlbmQgPSAuNzUpICsKICAjIHRoZW1lX2RhcmsoYmFzZV9saW5lX3NpemUgPSAwLjUpICsKICBnZW9tX2xpbmUoZGF0YSA9IG1lYW5fcGhpLCBhbHBoYSA9IC42LCBzaXplID0gMiwgY29sb3IgPSAncmVkJywgbmFtZT0iTWVhbiBvZiBhbGwgc3RhdGVzIikgKwogICMgZ2VvbV9yZWN0KGFlcyh4bWluPWZ1dHVyZVsxXSwgeG1heD1mdXR1cmVbMl0sIHltaW49MCwgeW1heD0xKSkgKwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IGZ1dHVyZVsxXSwgeG1heCA9IGZ1dHVyZVsyXSwgeW1pbiA9IDAsIHltYXggPSAxLCBhbHBoYSA9IC4yKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBndWlkZXMoY29sb3IgPSBGQUxTRSkKCnBfcGhpIDwtIGdfcGhpICU+JSBwbG90bHk6OmdncGxvdGx5KCkgJT4lIAogIHBsb3RseTo6bGF5b3V0KHNob3dsZWdlbmQgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAjIG1hcmdpbiA9IGxpc3QobCA9IDE1MCksCiAgICAgICAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIkh1bWFuIG1vdmVtZW50IChwaGkpXG4oJSBvZiBub3JtYWwpXG4mbmJzcDsiKQogICAgICAgICAgICAgICAgICkKcF9waGkKYGBgCgotLS0KCmIpIGxhdGVudCB0cmVuZCBmb3IgYWxsIHN0YXRlcyAoc3BhZ2hldHRpIHdpdGggbWVhbikuICAKCmBgYHtyfQphbGxfcHNpIDwtIHN0YXRlX3N1bW1hcmllcyAlPiUKICBmaWx0ZXIodmFyaWFibGUgPT0gImxhdGVudF90cmVuZCIpICU+JQogIGRwbHlyOjpzZWxlY3QobG9jYXRpb24sIGRhdGUsIG1lYW5fdmFsdWUpICU+JQogIGZpbHRlcihkYXRlIDw9IFN5cy5EYXRlKCkpCgptZWFuX3BzaSA8LSBhbGxfcHNpICU+JSBncm91cF9ieShkYXRlKSAlPiUgc3VtbWFyaXNlKG1lYW5fdmFsdWUgPSBtZWFuKG1lYW5fdmFsdWUpKQoKZ19wc2kgPC0gZ2dwbG90KGFsbF9wc2ksIGFlcyh4ID0gZGF0ZSwgeSA9IG1lYW5fdmFsdWUsIGNvbG9yID0gbG9jYXRpb24pKSArCiAgZ2VvbV9saW5lKHNpemUgPSAwLjUpICsKICAjIHlsYWIoIkxhdGVudCB0cmVuZFxuKCUgb2Ygbm9ybWFsKSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDEpLCBsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2Qob3B0aW9uID0gIkQiLCBkaXJlY3Rpb24gPSAtMSwgYWxwaGEgPSAuNiwgZW5kID0gLjc1KSArCiAgIyB0aGVtZV9kYXJrKGJhc2VfbGluZV9zaXplID0gMC41KSArCiAgZ2VvbV9saW5lKGRhdGEgPSBtZWFuX3BzaSwgYWxwaGEgPSAuNiwgc2l6ZSA9IDIsIGNvbG9yID0gJ3JlZCcsIG5hbWU9Ik1lYW4gb2YgYWxsIHN0YXRlcyIpICsKICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSBmdXR1cmVbMV0sIHhtYXggPSBmdXR1cmVbMl0sIHltaW4gPSAwLCB5bWF4ID0gMSwgYWxwaGEgPSAuMikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ3VpZGVzKGNvbG9yID0gRkFMU0UpCgpwX3BzaSA8LSBnX3BzaSAlPiUgcGxvdGx5OjpnZ3Bsb3RseSgpICU+JSAKICBwbG90bHk6OmxheW91dChzaG93bGVnZW5kID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgIyBtYXJnaW4gPSBsaXN0KGwgPSAxNTApLAogICAgICAgICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJMYXRlbnQgdHJlbmQgKHBzaSlcbiglIG9mIG5vcm1hbClcbiZuYnNwOyIpCiAgICAgICAgICAgICAgICAgKQpwX3BzaQpgYGAKCi0tLQoKYykgb21lZ2EgZm9yIGFsbCBzdGF0ZXMgKHNwYWdoZXR0aSB3aXRoIG1lYW4pLiAKCmBgYHtyfQphbGxfb21lZ2EgPC0gc3RhdGVfc3VtbWFyaWVzICU+JQogIGZpbHRlcih2YXJpYWJsZSA9PSAib21lZ2EiKSAlPiUKICBkcGx5cjo6c2VsZWN0KGxvY2F0aW9uLCBkYXRlLCBtZWFuX3ZhbHVlKSAlPiUKICBmaWx0ZXIoZGF0ZSA8PSBTeXMuRGF0ZSgpKQoKbWVhbl9vbWVnYSA8LSBhbGxfb21lZ2EgJT4lIGdyb3VwX2J5KGRhdGUpICU+JSBzdW1tYXJpc2UobWVhbl92YWx1ZSA9IG1lYW4obWVhbl92YWx1ZSkpCgpnX29tZWdhIDwtIGdncGxvdChhbGxfb21lZ2EsIGFlcyh4ID0gZGF0ZSwgeSA9IG1lYW5fdmFsdWUsIGNvbG9yID0gbG9jYXRpb24pKSArCiAgZ2VvbV9saW5lKHNpemUgPSAwLjUpICsKICAjIHlsYWIoIkxhdGVudCB0cmVuZFxuKCUgb2Ygbm9ybWFsKSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDEpLCBsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2Qob3B0aW9uID0gIkQiLCBkaXJlY3Rpb24gPSAtMSwgYWxwaGEgPSAuNiwgZW5kID0gLjc1KSArCiAgIyB0aGVtZV9kYXJrKGJhc2VfbGluZV9zaXplID0gMC41KSArCiAgZ2VvbV9saW5lKGRhdGEgPSBtZWFuX29tZWdhLCBhbHBoYSA9IC42LCBzaXplID0gMiwgY29sb3IgPSAncmVkJywgbmFtZT0iTWVhbiBvZiBhbGwgc3RhdGVzIikgKwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IGZ1dHVyZVsxXSwgeG1heCA9IGZ1dHVyZVsyXSwgeW1pbiA9IDAsIHltYXggPSAxLCBhbHBoYSA9IC4yKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBndWlkZXMoY29sb3IgPSBGQUxTRSkKCnBfb21lZ2EgPC0gZ19vbWVnYSAlPiUgcGxvdGx5OjpnZ3Bsb3RseSgpICU+JSAKICBwbG90bHk6OmxheW91dChzaG93bGVnZW5kID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgIyBtYXJnaW4gPSBsaXN0KGwgPSAxNTApLAogICAgICAgICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJSZWxhdGl2ZSB0cmFuc21pc3Npb24gKG9tZWdhKVxuKCUgb2Ygbm9ybWFsKVxuJm5ic3A7IikKICAgICAgICAgICAgICAgICApCnBfb21lZ2EKYGBgCgojIENvcnJlbGF0aW9uIGJldHdlZW4gT21lZ2EgYW5kIFByZXZhbGVuY2UKCmEpIHByZWRpY3RvciA9IG9tZWdhKHQpOyByZXNwb25zZSA9IGRhaWx5IHByZXZhbGVuY2UodCkKCmBgYHtyfQoKYWxsX3ByZXZhbGVuY2UgPC0gc3RhdGVfc3VtbWFyaWVzICU+JQogIGZpbHRlcihwZXJpb2QgPT0gIlBhc3QiKSAlPiUKICBmaWx0ZXIodmFyaWFibGUgPT0gInByZXZhbGVuY2UiKSAlPiUKICBkcGx5cjo6c2VsZWN0KGxvY2F0aW9uLCBkYXRlLCBtZWFuX3ZhbHVlKSAlPiUKICByZW5hbWUocHJldmFsZW5jZSA9IG1lYW5fdmFsdWUpICU+JSAKICBmaWx0ZXIoZGF0ZSA8PSBTeXMuRGF0ZSgpKQoKbWVhbl9hbGxfcHJldmFsZW5jZSA8LSBhbGxfcHJldmFsZW5jZSAlPiUgZ3JvdXBfYnkoZGF0ZSkgJT4lIHN1bW1hcmlzZShwcmV2YWxlbmNlID0gbWVhbihwcmV2YWxlbmNlKSkKIyBwbG90KHggPSBtZWFuX29tZWdhJG1lYW5fdmFsdWUsIHkgPSBtZWFuX2FsbF9wcmV2YWxlbmNlJHByZXZhbGVuY2UpCgpzdGF0ZV9zdW1tYXJpZXNfd2lkZSA8LSBzdGF0ZV9zdW1tYXJpZXMgJT4lCiAgZmlsdGVyKHBlcmlvZCA9PSAiUGFzdCIpICU+JQogIGZpbHRlcihzaW1fdHlwZSA9PSAnc3RhdHVzX3F1bycpICU+JSAKICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gdmFyaWFibGUsIHZhbHVlc19mcm9tID0gbWVhbl92YWx1ZSkgJT4lIAogIGdyb3VwX2J5KGxvY2F0aW9uKSAlPiUgCiAgbXV0YXRlKEFVX29tZWdhID0gY3Vtc3VtKG9tZWdhKSkKCkNBIDwtIHN0YXRlX3N1bW1hcmllc193aWRlICU+JSBmaWx0ZXIobG9jYXRpb24gPT0gIkNhbGlmb3JuaWEiKQoKIyBzdGF0ZV9zdW1tYXJpZXNfd2lkZSAlPiUgCiMgICBmaWx0ZXIobG9jYXRpb24gPT0gIkNhbGlmb3JuaWEiKSAlPiUgCiMgICBnZ3Bsb3QoYWVzKHggPSBvbWVnYSwgeSA9IHByZXZhbGVuY2UpKSArCiMgICBnZW9tX2xpbmUoc2l6ZSA9IDAuNSkgKwojICAgIyB5bGFiKCJMYXRlbnQgdHJlbmRcbiglIG9mIG5vcm1hbCkiKSArCiMgICAjIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMSksIGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwojICAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwojICAgc2NhbGVfY29sb3JfdmlyaWRpc19kKG9wdGlvbiA9ICJEIiwgZGlyZWN0aW9uID0gLTEsIGFscGhhID0gLjYsIGVuZCA9IC43NSkgKwojICAgIyB0aGVtZV9kYXJrKGJhc2VfbGluZV9zaXplID0gMC41KSArCiMgICAjIGdlb21fbGluZShkYXRhID0gbWVhbl9vbWVnYSwgYWxwaGEgPSAuNiwgc2l6ZSA9IDIsIGNvbG9yID0gJ3JlZCcsIG5hbWU9Ik1lYW4gb2YgYWxsIHN0YXRlcyIpICsKIyAgIHRoZW1lX21pbmltYWwoKSArCiMgICBndWlkZXMoY29sb3IgPSBGQUxTRSkKCmxhZ2ZpbGwgPC0gZnVuY3Rpb24oeCwgbGFnLGZpbGw9MSkgewogIHJlcGxhY2VfbmEobGFnKHgsbGFnKSxmaWxsKQp9CgpwbG90bHk6OnBsb3RfbHkoZGF0YSA9IENBLCB0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKG9tZWdhLDApLCB5ID0gfnByZXZhbGVuY2UsIAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCAKICAgICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJzwvYnI+IE9tZWdhOiAnLCBvbWVnYSwgJzwvYnI+IHByZXZhbGVuY2U6ICcsIHByZXZhbGVuY2UsICc8L2JyPiBEYXRlOiAnLCBkYXRlKSkgJT4lIAogIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIkNhbGlmb3JuaWEiLHhheGlzPWxpc3QodGl0bGU9Im9tZWdhIikseWF4aXM9bGlzdCh0aXRsZT0icHJldmFsZW5jZSIpKQoKcGxvdGx5OjpwbG90X2x5KGRhdGEgPSBzdGF0ZV9zdW1tYXJpZXNfd2lkZSwgdHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdtYXJrZXJzJywKICAgICAgICAgICAgICAgIHggPSB+bGFnZmlsbChvbWVnYSwwKSwgeSA9IH5wcmV2YWxlbmNlLCBjb2xvciA9IH5sb2NhdGlvbiwKICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywgCiAgICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBPbWVnYTogJywgb21lZ2EsICc8L2JyPiBwcmV2YWxlbmNlOiAnLCBwcmV2YWxlbmNlLCAnPC9icj4gRGF0ZTogJywgZGF0ZSwgJzwvYnI+IFN0YXRlOiAnLCBsb2NhdGlvbiApKSAlPiUgCiAgICBwbG90bHk6OmxheW91dCh0aXRsZSA9ICJBbGwgc3RhdGVzIiwgeGF4aXM9bGlzdCh0aXRsZT0ib21lZ2EiKSx5YXhpcz1saXN0KHRpdGxlPSJwcmV2YWxlbmNlIikpCgptZWFucyA8LSBtZWFuX29tZWdhICU+JSByZW5hbWUob21lZ2EgPSBtZWFuX3ZhbHVlKSAlPiUgCiAgZnVsbF9qb2luKG1lYW5fYWxsX3ByZXZhbGVuY2UpCgptZWFucyAlPiUgZmlsdGVyKGRhdGUgPCBmdXR1cmVbMV0pICU+JSAKICBwbG90bHk6OnBsb3RfbHkodHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdtYXJrZXJzJywKICAgICAgICAgICAgICAgIHggPSB+b21lZ2EsIHkgPSB+cHJldmFsZW5jZSwgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIAogICAgICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnPC9icj4gT21lZ2E6ICcsIG9tZWdhLCAnPC9icj4gcHJldmFsZW5jZTogJywgcHJldmFsZW5jZSwgJzwvYnI+IERhdGU6ICcsIGRhdGUgKSkgJT4lIAogIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIk1lYW4gb21lZ2EsIG1lYW4gcHJldmFsZW5jZSAoYWNyb3NzIHN0YXRlcykiLHhheGlzPWxpc3QodGl0bGU9Im9tZWdhIikseWF4aXM9bGlzdCh0aXRsZT0icHJldmFsZW5jZSIpKQoKYGBgCgotLS0KCkNhbGlmb3JuaWEsIGFuZCBtZWFuIGFjcm9zcyBzdGF0ZXMsIGF0IHZhcnlpbmcgbGFncwoKYGBge3J9CkNBICU+JSBmaWx0ZXIocGVyaW9kID09ICdQYXN0JykgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKG9tZWdhLDApLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDAiLAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBPbWVnYTogJywgb21lZ2EsICc8L2JyPiBwcmV2YWxlbmNlOiAnLCBwcmV2YWxlbmNlLCAnPC9icj4gRGF0ZTogJywgZGF0ZSkpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwob21lZ2EsNyksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgNyIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwob21lZ2EsMTQpLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDE0IikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChvbWVnYSwyMSksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgMjEiKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKG9tZWdhLDI4KSwgeSA9IH5wcmV2YWxlbmNlLCBuYW1lID0gImxhZyAyOCIpICU+JSAKICBwbG90bHk6OmxheW91dCh0aXRsZSA9ICJDYWxpZm9ybmlhLCBvbWVnYSBhdCB2YXJ5aW5nIGxhZ3MiLCB4YXhpcyA9IGxpc3QodGl0bGUgPSAib21lZ2EiKSkKCm1lYW5zICU+JSBmaWx0ZXIoZGF0ZSA8IGZ1dHVyZVsxXSkgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKG9tZWdhLDApLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDAiLAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBPbWVnYTogJywgb21lZ2EsICc8L2JyPiBwcmV2YWxlbmNlOiAnLCBwcmV2YWxlbmNlLCAnPC9icj4gRGF0ZTogJywgZGF0ZSkpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwob21lZ2EsNyksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgNyIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwob21lZ2EsMTQpLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDE0IikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChvbWVnYSwyMSksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgMjEiKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKG9tZWdhLDI4KSwgeSA9IH5wcmV2YWxlbmNlLCBuYW1lID0gImxhZyAyOCIpICU+JSAKICBwbG90bHk6OmxheW91dCh0aXRsZSA9ICJNZWFuIG9tZWdhLCBtZWFuIHByZXZhbGVuY2UgKGFjcm9zcyBzdGF0ZXMpXG5vbWVnYSBhdCB2YXJ5aW5nIGxhZ3MiLCB4YXhpcyA9IGxpc3QodGl0bGUgPSAib21lZ2EiKSkKCmBgYAoKLS0tCgpiKSBwcmVkaWN0b3IgPSBBVUMgb2Ygb21lZ2Egb3ZlciB0aW1lOyByZXNwb25zZSA9IGN1bXVsYXRpdmUgYWxsIGluZmVjdGlvbnMgb3ZlciB0aW1lCgpgYGB7cn0KCkNBICU+JSBmaWx0ZXIocGVyaW9kID09ICdQYXN0JykgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKEFVX29tZWdhLDApLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIG5hbWUgPSAnbGFnIDAnLCAKICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywgCiAgICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBBcmVhIHVuZGVyIE9tZWdhOiAnLCBBVV9vbWVnYSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2JyPiBDdW11bGF0aXZlIGluZmVjdGlvbnM6ICcsIGN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9icj4gRGF0ZTogJywgZGF0ZSkpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwoQVVfb21lZ2EsNyksIHkgPSB+Y3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgbmFtZSA9ICJsYWcgNyIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwoQVVfb21lZ2EsMTQpLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIG5hbWUgPSAibGFnIDE0IikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChBVV9vbWVnYSwyMSksIHkgPSB+Y3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgbmFtZSA9ICJsYWcgMjEiKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKEFVX29tZWdhLDI4KSwgeSA9IH5jdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLCBuYW1lID0gImxhZyAyOCIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwoQVVfb21lZ2EsNTYpLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIG5hbWUgPSAibGFnIDU2IikgJT4lIAogIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIkNhbGlmb3JuaWEsIGFyZWEgdW5kZXIgb21lZ2EgYXQgdmFyeWluZyBsYWdzIix4YXhpcz1saXN0KHRpdGxlPSJBcmVhIHVuZGVyIG9tZWdhIikseWF4aXM9bGlzdCh0aXRsZT0iQ3VtdWxhdGl2ZSBpbmZlY3Rpb25zIikpCgpzdGF0ZV9zdW1tYXJpZXNfd2lkZSAlPiUgZmlsdGVyKHBlcmlvZCA9PSAnUGFzdCcpICU+JSAKICBwbG90bHk6OnBsb3RfbHkodHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdtYXJrZXJzJywKICAgICAgICAgICAgICAgIHggPSB+bGFnZmlsbChBVV9vbWVnYSwwKSwgeSA9IH5jdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLCBjb2xvciA9IH5sb2NhdGlvbiwKICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywgCiAgICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBBcmVhIHVuZGVyIE9tZWdhOiAnLCBBVV9vbWVnYSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2JyPiBDdW11bGF0aXZlIGluZmVjdGlvbnM6ICcsIGN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9icj4gRGF0ZTogJywgZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnI+IFN0YXRlOiAnLCBsb2NhdGlvbikpICU+JSAKICAgIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIkFsbCBzdGF0ZXMiLCB4YXhpcz1saXN0KHRpdGxlPSJBcmVhIHVuZGVyIG9tZWdhIChsYWcgMCkiKSwgeWF4aXM9bGlzdCh0aXRsZT0iQ3VtdWxhdGl2ZSBpbmZlY3Rpb25zIikpCgoKYGBgCgotLS0KCmMpIHByZWRpY3RvciA9IEFVQyBvZiBvbWVnYTsgcmVzcG9uc2UgPSBjdW11bGF0aXZlIGFsbCBpbmZlY3Rpb25zCgpgYGB7cn0Kc3RhdGVfc3VtbWFyaWVzX3dpZGUgJT4lIAogIGZpbHRlcihwZXJpb2QgPT0gJ1Bhc3QnKSAlPiUgCiAgZ3JvdXBfYnkobG9jYXRpb24pICU+JSAKICBzdW1tYXJpc2UoQVVfb21lZ2EgPSBtYXgoQVVfb21lZ2EpLCBjdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zID0gbWF4KGN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMpKSAlPiUgCiAgcGxvdGx5OjpwbG90X2x5KHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICB4ID0gfkFVX29tZWdhLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIAogICAgICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnPC9icj4gQXJlYSB1bmRlciBPbWVnYTogJywgQVVfb21lZ2EsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9icj4gQ3VtdWxhdGl2ZSBpbmZlY3Rpb25zOiAnLCBjdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnI+IFN0YXRlOiAnLCBsb2NhdGlvbikpICU+JSAKICAgIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIkNvcnJlbGF0aW9uIG9mIGN1bXVsYXRpdmUgaW5mZWN0aW9uIHdpdGggQXJlYSB1bmRlciBvbWVnYSIsIHhheGlzPWxpc3QodGl0bGU9IkFyZWEgdW5kZXIgb21lZ2EiKSwgeWF4aXM9bGlzdCh0aXRsZT0iQ3VtdWxhdGl2ZSBpbmZlY3Rpb25zIikpCmBgYAoKLS0tCgplKSBtYXAgb2Ygc2FtZSAoY29ycmVsYXRpb24sIGJ5IHN0YXRlKQoKCg==